{
  "version": 1136,
  "typeDefinitions": [
    {
      "kind": "Primitive",
      "name": "bool",
      "size": 1,
      "description": "Boolean"
    },
    {
      "kind": "Primitive",
      "name": "u8",
      "size": 1,
      "description": "Unsigned integer, 8-bit."
    },
    {
      "kind": "Primitive",
      "name": "u16",
      "size": 2,
      "description": "Unsigned integer, 16-bit."
    },
    {
      "kind": "Primitive",
      "name": "u32",
      "size": 4,
      "description": "Unsigned integer, 32-bit."
    },
    {
      "kind": "Primitive",
      "name": "i64",
      "size": 8,
      "description": "Signed integer, 64-bit."
    },
    {
      "kind": "Primitive",
      "name": "u64",
      "size": 8,
      "description": "Unsigned integer, 64-bit."
    },
    {
      "kind": "Alias",
      "name": "AnsiChar",
      "alias": "u8",
      "description": "String."
    },
    {
      "kind": "Alias",
      "name": "BulkSeqNum",
      "alias": "u8",
      "description": "Bulk sequence number of the message."
    },
    {
      "kind": "Alias",
      "name": "ConnectionId",
      "alias": "u16",
      "description": "ID of the connection. Must fit into 14 bits, see OrderId for details."
    },
    {
      "kind": "Alias",
      "name": "ElementId",
      "alias": "u32",
      "description": "Element id."
    },
    {
      "kind": "Enum",
      "name": "OrderFlags",
      "underlying": "u8",
      "description": "Order related flags.",
      "bitflags": true,
      "variants": [
        [
          "None",
          "0b0000"
        ],
        [
          "LiquidityProvisionActivity",
          "0b0001"
        ],
        [
          "DirectOrSponsoredAccess",
          "0b0010"
        ],
        [
          "MarketMakerOrSpecialist",
          "0b0100"
        ]
      ]
    },
    {
      "kind": "Alias",
      "name": "MsgLength",
      "alias": "u16",
      "description": "Length of the message."
    },
    {
      "kind": "Alias",
      "name": "MsgVersion",
      "alias": "u16",
      "description": "Message version - used to differentiate between messages sent using different versions of the protocol."
    },
    {
      "kind": "Alias",
      "name": "Number",
      "alias": "i64",
      "description": "Number."
    },
    {
      "kind": "Alias",
      "name": "STPId",
      "alias": "u8",
      "description": "An ID assigned by the client used in Self Trade Prevention mechanism."
    },
    {
      "kind": "Alias",
      "name": "PublicOrderId",
      "alias": "u64",
      "description": "Unique for single trading day order identifier assigned by the trading system and shared publicly in market data (public information)."
    },
    {
      "kind": "Alias",
      "name": "OrderId",
      "alias": "u64",
      "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
    },
    {
      "kind": "Alias",
      "name": "Price",
      "alias": "Number",
      "description": "Price."
    },
    {
      "kind": "Alias",
      "name": "Quantity",
      "alias": "u64",
      "description": "Quantity."
    },
    {
      "kind": "Alias",
      "name": "SeqNum",
      "alias": "u32",
      "description": "Sequence number of the message. Must fit into 28 bits, see OrderId for details."
    },
    {
      "kind": "Alias",
      "name": "SessionId",
      "alias": "u16",
      "description": "ID of the session. Must fit into 14 bits, see OrderId for details."
    },
    {
      "kind": "Alias",
      "name": "ShortCode",
      "alias": "u32",
      "description": "Short code (participant or clinet identifier)."
    },
    {
      "kind": "Alias",
      "name": "Timestamp",
      "alias": "u64",
      "description": "Timestamp in nanoseconds that has elapsed from the UNIX epoch (exact date and time of an event)."
    },
    {
      "kind": "Alias",
      "name": "TradeId",
      "alias": "u32",
      "description": "Unique trade id."
    },
    {
      "kind": "Array",
      "name": "Account",
      "type": "AnsiChar",
      "length": 16,
      "description": "Account numer."
    },
    {
      "kind": "Array",
      "name": "ParticipantCode",
      "type": "AnsiChar",
      "length": 16,
      "description": "Participant code."
    },
    {
      "kind": "Array",
      "name": "Token",
      "type": "AnsiChar",
      "length": 8,
      "description": "The token required for authentication."
    },
    {
      "kind": "Array",
      "name": "Memo",
      "type": "AnsiChar",
      "length": 18,
      "description": "Free format text string."
    },
    {
      "kind": "Array",
      "name": "InterestedParty",
      "type": "AnsiChar",
      "length": 8,
      "description": "3rd party interested in this order or trade."
    },
    {
      "kind": "Array",
      "name": "ClientOrderId",
      "type": "AnsiChar",
      "length": 20,
      "description": "Arbitrary user provided value associated with the order."
    },
    {
      "kind": "Array",
      "name": "MicCode",
      "type": "AnsiChar",
      "length": 4,
      "description": "Market Identifier Code (MIC) as specified in ISO 10383."
    },
    {
      "kind": "Enum",
      "name": "AccountType",
      "description": "Account type.",
      "underlying": "u8",
      "variants": [
        [
          "Missing",
          1,
          "Account is missing. Account is expected to be filled with 0x00."
        ],
        [
          "Customer",
          2,
          "Account is carried on customer side of the books."
        ],
        [
          "House",
          3,
          "House trader."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "Capacity",
      "description": "Designates the capacity of the firm placing the order.",
      "underlying": "u8",
      "variants": [
        [
          "Agency",
          1,
          "Agency (mapped to AOTC)."
        ],
        [
          "Principal",
          2,
          "Principal (mapped to DEAL)."
        ],
        [
          "RisklessPrincipal",
          3,
          "Riskless Principal (mapped to MTCH)"
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "ConnectionCloseReason",
      "description": "Reasons of the logout.",
      "underlying": "u8",
      "variants": [
        [
          "ProtocolError",
          1,
          "Invalid message or frame length."
        ],
        [
          "InvalidSeqNum",
          2,
          "Message came with an incorrect sequence number."
        ],
        [
          "EndOfDay",
          3,
          "The session day has come to an end."
        ],
        [
          "SyncFail",
          4,
          "The synchronization of messages has failed."
        ],
        [
          "AntiFloodingThresholdExceeded",
          5,
          "The second level of the throttling limit has been exceeded."
        ],
        [
          "ConnectionConfigChanged",
          6,
          "Connection configuration has changed"
        ],
        [
          "CloseOps",
          7,
          "Service closed the connection because of an exchange operation  (e.g. supervision operation)."
        ],
        [
          "Disconnect",
          8,
          "Service closed the connection because of an internal operation (e.g. grace period end)."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "LoginResult",
      "description": "Login response status code.",
      "underlying": "u8",
      "variants": [
        [
          "Ok",
          1,
          "Successful login."
        ],
        [
          "NotFound",
          2,
          "User not found."
        ],
        [
          "InvalidToken",
          3,
          "Authorization failure."
        ],
        [
          "AlreadyLoggedIn",
          4,
          "Already logged in."
        ],
        [
          "AccountLocked",
          5,
          "Account locked."
        ],
        [
          "LoginNotAllowed",
          6,
          "Login is currently unavailable due to reasons such as service unavailability."
        ],
        [
          "InvalidLoginParameters",
          7,
          "The login parameters, such as the connection ID, are invalid."
        ],
        [
          "ThrottlingTemporaryLock",
          8,
          "The login attempt failed due to exceeding the anti-flooding threshold."
        ],
        [
          "Other",
          9,
          "Other errors."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "OrderSide",
      "description": "Trading Port - indicates order side (buy or sell).",
      "underlying": "u8",
      "variants": [
        [
          "Buy",
          1,
          "Indicates a buy-side order."
        ],
        [
          "Sell",
          2,
          "Indicates a sell-side order."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "OrderStatus",
      "description": "Indicates the status of the order.",
      "underlying": "u8",
      "variants": [
        [
          "New",
          1,
          "New order( for Mass Quotes ->operation accepted)."
        ],
        [
          "Cancelled",
          2,
          "Order cancelled (Not applicable to mass quotes)."
        ],
        [
          "Rejected",
          3,
          "Order rejected."
        ],
        [
          "Filled",
          4,
          "Order filled (Not applicable to mass quotes)."
        ],
        [
          "PartiallyFilled",
          5,
          "Order partially filled (Not applicable to mass quotes)."
        ],
        [
          "Expired",
          6,
          "Order expired (Not applicable to mass quotes)."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "OrderType",
      "description": "Indicates the type of a given order.",
      "underlying": "u8",
      "variants": [
        [
          "Limit",
          1,
          "Limit order type."
        ],
        [
          "Market",
          2,
          "Market order type."
        ],
        [
          "MarketToLimit",
          3,
          "Market to limit order type."
        ],
        [
          "Iceberg",
          4,
          "Iceberg order type."
        ],
        [
          "StopLimit",
          5,
          "Stop limit order type."
        ],
        [
          "StopLoss",
          6,
          "Stop loss order type."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "PriorityFlag",
      "description": "Indicates whether the priority flag was lost or retained.",
      "underlying": "u8",
      "variants": [
        [
          "Lost",
          1,
          "The priority flag was lost."
        ],
        [
          "Retained",
          2,
          "The priority flag was retained."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "OrderRejectionReason",
      "description": "A code used to identify the reason for order rejection.",
      "underlying": "u16",
      "variants": [
        [
          "NA",
          0,
          "Not applicable."
        ],
        [
          "UnknownOrder",
          1,
          "Order id not recognized by the system."
        ],
        [
          "ExchangeClosed",
          2,
          "Exchange closed."
        ],
        [
          "InvalidPriceIncrement",
          18,
          "Invalid price increment."
        ],
        [
          "Other",
          99,
          "Other."
        ],
        [
          "InstrumentPhaseNoTrading",
          106,
          "Trading is not available for the instrument in its current phase."
        ],
        [
          "UnknownInstrument",
          1001,
          "Unknown instrument."
        ],
        [
          "InvalidExecutionTrader",
          1005,
          "Invalid execution trader."
        ],
        [
          "InvalidDecisionMaker",
          1006,
          "Invalid decision maker."
        ],
        [
          "InvalidClientId",
          1007,
          "Invalid client."
        ],
        [
          "InvalidPartyRoleQualifierForClientId",
          1008,
          "Invalid Party Role Qualifier for Client Id Party group"
        ],
        [
          "InvalidPartyRoleQualifierForExecutingTrader",
          1009,
          "Invalid Party Role Qualifier for Executing Trader Party group"
        ],
        [
          "InvalidPartyRoleQualifierForInvestmentDecisionMaker",
          1010,
          "Invalid Party Role Qualifier for Investment Decision Maker Party group"
        ],
        [
          "CannotModifyMifidFlags",
          1012,
          "Cannot modify MiFID flags."
        ],
        [
          "WrongDisplayQtyValue",
          1013,
          "The display quantity (displayQty) cannot exceed the order quantity."
        ],
        [
          "InvalidDisplayQty",
          1014,
          "The Display quantity (displayQty) not allowed for specified order type - only for Iceberg."
        ],
        [
          "IcebergOrderValueLessThanRequired",
          1015,
          "The value of the iceberg order is less than the required."
        ],
        [
          "CodDisabledForTheConnectionId",
          1019,
          "Attempt to submit an order with ExecInst = CancelOnConnectionLoss, while CoD being disabled for the ConnectionID used.."
        ],
        [
          "OrderQuantityMustBeGreaterThanMinimumQuantity",
          1025,
          "The order quantity must be greater than the minimum quanity."
        ],
        [
          "OrderQuantityMustBeLowerThanMaximumQuantity",
          1026,
          "The order quantity must be lower than the maximum quantity."
        ],
        [
          "OrderPriceMustBeGreaterThanMinimumPrice",
          1027,
          "The order price must be greater than minimum price."
        ],
        [
          "OrderPriceMustBeLowerThanMaximumPrice",
          1028,
          "The order price must be greater than maximum price."
        ],
        [
          "OrderPriceMustBeNonzero",
          1029,
          "The order price must be non-zero."
        ],
        [
          "OrderValueMustBeGreaterThanMinimumValue",
          1030,
          "The order value must be greater than minimum value."
        ],
        [
          "OrderValueMustBeLowerThanMaximumValue",
          1031,
          "The order value must be lower than maximum value."
        ],
        [
          "InvalidOrdTypeForSelectedMarketModel",
          1032,
          "Invalid OrdType for selected market model"
        ],
        [
          "LeavesQuantityMustBeGreaterThanZeroAfterModification",
          1034,
          "The remaining quantity (LeavesQty) must be greater than 0 after the modification."
        ],
        [
          "PriceNotAllowed",
          1035,
          "The price is not allowed for a market order. In the binary protocol, the price field should have a value of 0."
        ],
        [
          "InvalidTimeInForceForOrderType",
          1039,
          "Invalid TimeInForce for specified OrderType"
        ],
        [
          "InvalidTimeInForceForCurrentMarketPhase",
          1040,
          "Invalid TimeInForce for current market phase"
        ],
        [
          "InvalidTimeInForceForSelectedMarketModel",
          1041,
          "Invalid TimeInForce for selected market model"
        ],
        [
          "ForbiddenOrdTypeAndTimeInForceCombinationForMarketSegment",
          1042,
          "Time In Force vs. Order Type combination restriction per Market Segment imposed by Market Operator."
        ],
        [
          "ExpireTimeCannotBeModified",
          1043,
          "ExpireTime (126) cannot be modified."
        ],
        [
          "ObsoleteExpireDate",
          1044,
          "ExpireDate (432) not allowed for selected TimeInForce (59)."
        ],
        [
          "ExpireDateInPast",
          1045,
          "The expiration date is earlier than the current date."
        ],
        [
          "ObsoleteExpireTime",
          1046,
          "ExpireTime (126) not allowed for selected TimeInForce (59)."
        ],
        [
          "ExpireTimeInPast",
          1047,
          "The expiration time is earlier than the current time."
        ],
        [
          "AmbigousExpire",
          1048,
          "Please provide either a time or a date, but not both."
        ],
        [
          "ExpireDateExceedsLimit",
          1049,
          "The expiration date exceeds the allowed limit."
        ],
        [
          "PriceBelowLowCollar",
          1037,
          "The validation for collars has failed. The price is too low."
        ],
        [
          "PriceAboveHighCollar",
          1038,
          "The validation for collars has failed. The price is too high."
        ],
        [
          "FirmIsNotAMarketMaker",
          1050,
          "Firm is not a Market Maker for this SecurityID (48)"
        ],
        [
          "MissingOrderOriginationForSponsoredAccessConnection",
          1055,
          "Missing OrderOrigination for sponsored access connection."
        ],
        [
          "OperationOnRedistributedInstrumentsForbidden",
          1056,
          "Operation on redistributed instruments forbidden."
        ],
        [
          "FirmNotAuthorizedToBuyAndSellTheInstrument",
          1057,
          "Firm has not been granted permission to buy and sell the selected instrument. Order entry/modification/cancellation is not possible."
        ],
        [
          "FirmNotAuthorizedToBuyTheInstrument",
          1058,
          "Firm has not been granted permission to buy the selected instrument (only selling is allowed). Order entry/modification/cancellation on the buy side is not possible."
        ],
        [
          "FirmNotAuthorizedToSellTheInstrument",
          1059,
          "Firm has not been granted permission to sell the selected instrument (only buying is allowed). Order entry/modification/cancellation on the sell side is not possible."
        ],
        [
          "OperationsOnOrdersAndQuotesForbiddenDuringUncrossing",
          1060,
          "Entry/modification/cancellation of orders and quotes is not possible when an instrument is being uncrossed."
        ],
        [
          "OperationsOnOrdersAndQuotesForbiddenDuringInstrumentSuspension",
          1061,
          "Entry/modification/cancellation of orders and quotes is not possible when an instrument is suspended."
        ],
        [
          "OperationsOnOrdersAndQuotesForbiddenDueToDropCopyDisconnection",
          1062,
          "Operations on orders and quotes forbidden due to Drop Copy disconnection."
        ],
        [
          "TriggerPriceNotAllowed",
          1063,
          "The trigger price not allowed for a specified order type."
        ],
        [
          "TriggerPriceNotHigherThanLTP",
          1064,
          "The trigger price is not higher than the last trade price."
        ],
        [
          "TriggerPriceNotLowerThanLTP",
          1065,
          "The trigger price is not lower than the last trade price."
        ],
        [
          "TriggerPriceLowerThanPrice",
          1066,
          "The trigger price is lower than the limit price."
        ],
        [
          "TriggerPriceHigherThanPrice",
          1067,
          "The trigger price is higher than the limit price."
        ],
        [
          "TriggerPriceModifiedForActivatedOrder",
          1068,
          "The trigger price has been modified for the activated order."
        ],
        [
          "TriggerPriceMustBeGreaterThanZero",
          1069,
          "TriggerPrice (1102) must be greater than 0."
        ],
        [
          "InvalidPartyIdForClientId",
          1070,
          "Invalid PartyID (448) for Client ID"
        ],
        [
          "InvalidPartyIdForExecutingTrader",
          1071,
          "Invalid PartyID (448) for Executing Trader"
        ],
        [
          "InvalidPartyIdForInvestmentDecisionMaker",
          1072,
          "Invalid PartyID (448) for Investment Decision Maker"
        ],
        [
          "InvalidPartyRoleQualifierForPartyId",
          1075,
          "Invalid PartyRoleQualifier (2376) for PartyID (448)"
        ],
        [
          "MissingClearingMemberCode",
          1076,
          "Missing ClearingMemberCode"
        ],
        [
          "ForbiddenClearingMemberCode",
          1077,
          "Forbidden ClearingMemberCode"
        ],
        [
          "InvalidClientIdForSponsoredConnection",
          1078,
          "Invalid Client ID for sponsored connection"
        ],
        [
          "InvalidOrdTypeForSponsoredConnection",
          1079,
          "Invalid OrdType for sponsored connection"
        ],
        [
          "ForbiddenOrderCapacityValueForSponsoredConnection",
          1080,
          "Forbidden OrderCapacity value for sponsored connection"
        ],
        [
          "MarketModelNotSupportedOnSponsoredConnection",
          1081,
          "Market Model not supported sponsored connection"
        ],
        [
          "InvalidTimeInForceForSponsoredConnection",
          1083,
          "Invalid TimeInForce for sponsored connection"
        ],
        [
          "OperationForbiddenDuringEarlyLateMonitoring",
          1084,
          "Entry/modification/cancellation of orders and quotes by members, as well as block and cross trades submission is not allowed when an instrument remains in Early / Late Monitoring market phases."
        ],
        [
          "InvalidClearingMemberCodeLength",
          1085,
          "Clearing Member code must be 4-digit number in case of custom codes and 20-char string in case of LEI."
        ],
        [
          "MassQuoteNotAllowedForSelectedMarketModel",
          1201,
          "Mass Quote not allowed for selected Market Model."
        ],
        [
          "InstrumentClosed",
          1203,
          "Instrument closed for trading."
        ],
        [
          "InvalidBidAskSpread",
          1208,
          "OfferPx (133) must be greater than BidPx (132)."
        ],
        [
          "NotAuthorizedToQuoteInstrument",
          1209,
          "Firm is not a Market Maker for this SecurityID (48)."
        ],
        [
          "BuyOrderNotAllowed",
          1301,
          "Buy orders from participants are not allowed in BuyOnly phase."
        ],
        [
          "StopOrdersNotAllowed",
          1307,
          "Stop Orders not allowed when no opposite LP quote available"
        ],
        [
          "TriggerPriceMustBeHigherThanLpSellQuote",
          1308,
          "TriggerPrice (1102) must be higher than LP sell quote for buy Stop Order"
        ],
        [
          "TriggerPriceMustBeLowerThanLpBuyQuote",
          1309,
          "TriggerPrice (1102) must be lower than LP buy quote for sell Stop Order"
        ],
        [
          "MarketMakingViaMassQuoteOnlyOnHybridMarket",
          1310,
          "Market Making in Hybrid market model is only possible using Mass Quote message."
        ],
        [
          "SellQuotesNotAllowedDuringBuyOnlyState",
          1311,
          "During BuyOnly  state in Hybrid market model sell quotes are not accepted"
        ],
        [
          "InstrumentKnockedOut",
          1312,
          "As soon as the instrument's knock-out barrier is reached by the underlying, any orders/quotes are no longer accepted into the order book."
        ],
        [
          "OnlyOneSellOrderIsAllowedForIpo",
          1401,
          "Only one sell order is allowed for IPO instrument"
        ],
        [
          "OnlyOneBuyOrderIsAllowedForTender",
          1402,
          "Only one buy order is allowed for Tender instrument"
        ],
        [
          "RequestNotAllowedForBlockInstrument",
          2026,
          "Request not allowed for BLOCK instrument"
        ],
        [
          "RequestNotAllowedForCrossInstrument",
          2028,
          "Request not allowed for CROSS instrument"
        ],
        [
          "RiskLimitNotDefined",
          7000,
          "The risk limit has not been defined."
        ],
        [
          "RiskMaximumOrderVolumeExceeded",
          7001,
          "The maximum order volume for the risk limit has been exceeded."
        ],
        [
          "RiskMaximumOrderValueExceeded",
          7002,
          "The maximum order value for the risk limit has been exceeded."
        ],
        [
          "RiskOrderPriceCollarExceeded",
          7003,
          "The order price has exceeded the risk limit."
        ],
        [
          "DynamicOrderPriceCollarNotDefined",
          7004,
          "Dynamic Order Price Collar not defined."
        ],
        [
          "StaticOrderPriceCollarNotDefined",
          7005,
          "Static Order Price Collar not defined."
        ],
        [
          "TotalTradedValueExceeded",
          7011,
          "Total traded value has exceeded the risk limit."
        ],
        [
          "TotalTradedBuyValueExceeded",
          7012,
          "Total traded buy value has exceeded the risk limit."
        ],
        [
          "TotalTradedSellValueExceeded",
          7013,
          "Total traded sell value has exceeded the risk limit."
        ],
        [
          "TotalOpenValueExceeded",
          7014,
          "Total open value has exceeded the risk limit."
        ],
        [
          "TotalOpenBuyValueExceeded",
          7015,
          "Total open buy value has exceeded the risk limit."
        ],
        [
          "TotalOpenSellValueExceeded",
          7016,
          "Total open sell value has exceeded the risk limit."
        ],
        [
          "TotalRiskValueExceeded",
          7017,
          "Total risk value has exceeded the risk limit."
        ],
        [
          "TotalBuyRiskValueExceeded",
          7018,
          "Total buy risk value has exceeded the risk limit."
        ],
        [
          "TotalSellRiskValueExceeded",
          7019,
          "Total sell risk value has exceeded the risk limit."
        ],
        [
          "TotalNetRiskValueExceeded",
          7020,
          "Total net risk value has exceeded the risk limit."
        ],
        [
          "MaxOrderCountExceeded",
          7021,
          "Maximum order count has exceeded the risk limit."
        ],
        [
          "RejectedDueToKillSwitchActivation",
          7022,
          "Rejected due to kill switch activation."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "TimeInForce",
      "description": "Indicates the order's time in force (e.g. GTC).",
      "underlying": "u8",
      "variants": [
        [
          "Day",
          1,
          "A day order is valid until the end of the trading day."
        ],
        [
          "GTC",
          2,
          "A GTC order is good till canceled."
        ],
        [
          "IOC",
          3,
          "An Immediate or Cancel order must be filled immediately or canceled."
        ],
        [
          "FOK",
          4,
          "A Fill or Kill order must be immediately fully filled or canceled."
        ],
        [
          "VFA",
          5,
          "Valid For Auction."
        ],
        [
          "GTD",
          6,
          "A Good Till Date order must be filled before timestamp provided in `Expire` field or canceled."
        ],
        [
          "VFC",
          7,
          "Valid For Closing."
        ],
        [
          "GTT",
          8,
          "A Good Till Time order must be filled before timestamp provided in `Expire` field or canceled within the day of submission."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "LiquidityIndicator",
      "description": "Liquidity indicator",
      "underlying": "u8",
      "variants": [
        [
          "BuyOrderExecution",
          1,
          "Buy order execution"
        ],
        [
          "SellOrderExecution",
          2,
          "Sell order execution"
        ],
        [
          "AuctionExecution",
          3,
          "Auction execution"
        ],
        [
          "NotApplicable",
          4,
          "Not applicable"
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "Currency",
      "description": "Currency - ISO 4217 code (e.g. PLN)",
      "underlying": "u16",
      "variants": [
        [
          "ALL",
          8,
          "Lek"
        ],
        [
          "DZD",
          12,
          "Algerian Dinar"
        ],
        [
          "ARS",
          32,
          "Argentine Peso"
        ],
        [
          "AUD",
          36,
          "Australian Dollar"
        ],
        [
          "BSD",
          44,
          "Bahamian Dollar"
        ],
        [
          "BHD",
          48,
          "Bahraini Dinar"
        ],
        [
          "BDT",
          50,
          "Taka"
        ],
        [
          "AMD",
          51,
          "Armenian Dram"
        ],
        [
          "BBD",
          52,
          "Barbados Dollar"
        ],
        [
          "BMD",
          60,
          "Bermudian Dollar"
        ],
        [
          "BTN",
          64,
          "Ngultrum"
        ],
        [
          "BOB",
          68,
          "Boliviano"
        ],
        [
          "BWP",
          72,
          "Pula"
        ],
        [
          "BZD",
          84,
          "Belize Dollar"
        ],
        [
          "SBD",
          90,
          "Solomon Islands Dollar"
        ],
        [
          "BND",
          96,
          "Brunei Dollar"
        ],
        [
          "MMK",
          104,
          "Kyat"
        ],
        [
          "BIF",
          108,
          "Burundi Franc"
        ],
        [
          "KHR",
          116,
          "Riel"
        ],
        [
          "CAD",
          124,
          "Canadian Dollar"
        ],
        [
          "CVE",
          132,
          "Cabo Verde Escudo"
        ],
        [
          "KYD",
          136,
          "Cayman Islands Dollar"
        ],
        [
          "LKR",
          144,
          "Sri Lanka Rupee"
        ],
        [
          "CLP",
          152,
          "Chilean Peso"
        ],
        [
          "CNY",
          156,
          "Yuan Renminbi"
        ],
        [
          "COP",
          170,
          "Colombian Peso"
        ],
        [
          "KMF",
          174,
          "Comorian Franc "
        ],
        [
          "CRC",
          188,
          "Costa Rican Colon"
        ],
        [
          "HRK",
          191,
          "Kuna"
        ],
        [
          "CUP",
          192,
          "Cuban Peso"
        ],
        [
          "CZK",
          203,
          "Czech Koruna"
        ],
        [
          "DKK",
          208,
          "Danish Krone"
        ],
        [
          "DOP",
          214,
          "Dominican Peso"
        ],
        [
          "SVC",
          222,
          "El Salvador Colon"
        ],
        [
          "ETB",
          230,
          "Ethiopian Birr"
        ],
        [
          "ERN",
          232,
          "Nakfa"
        ],
        [
          "FKP",
          238,
          "Falkland Islands Pound"
        ],
        [
          "FJD",
          242,
          "Fiji Dollar"
        ],
        [
          "DJF",
          262,
          "Djibouti Franc"
        ],
        [
          "GMD",
          270,
          "Dalasi"
        ],
        [
          "GIP",
          292,
          "Gibraltar Pound"
        ],
        [
          "GTQ",
          320,
          "Quetzal"
        ],
        [
          "GNF",
          324,
          "Guinean Franc"
        ],
        [
          "GYD",
          328,
          "Guyana Dollar"
        ],
        [
          "HTG",
          332,
          "Gourde"
        ],
        [
          "HNL",
          340,
          "Lempira"
        ],
        [
          "HKD",
          344,
          "Hong Kong Dollar"
        ],
        [
          "HUF",
          348,
          "Forint"
        ],
        [
          "ISK",
          352,
          "Iceland Krona"
        ],
        [
          "INR",
          356,
          "Indian Rupee"
        ],
        [
          "IDR",
          360,
          "Rupiah"
        ],
        [
          "IRR",
          364,
          "Iranian Rial"
        ],
        [
          "IQD",
          368,
          "Iraqi Dinar"
        ],
        [
          "ILS",
          376,
          "New Israeli Sheqel"
        ],
        [
          "JMD",
          388,
          "Jamaican Dollar"
        ],
        [
          "JPY",
          392,
          "Yen"
        ],
        [
          "KZT",
          398,
          "Tenge"
        ],
        [
          "JOD",
          400,
          "Jordanian Dinar"
        ],
        [
          "KES",
          404,
          "Kenyan Shilling"
        ],
        [
          "KPW",
          408,
          "North Korean Won"
        ],
        [
          "KRW",
          410,
          "Won"
        ],
        [
          "KWD",
          414,
          "Kuwaiti Dinar"
        ],
        [
          "KGS",
          417,
          "Som"
        ],
        [
          "LAK",
          418,
          "Lao Kip"
        ],
        [
          "LBP",
          422,
          "Lebanese Pound"
        ],
        [
          "LSL",
          426,
          "Loti"
        ],
        [
          "LRD",
          430,
          "Liberian Dollar"
        ],
        [
          "LYD",
          434,
          "Libyan Dinar"
        ],
        [
          "MOP",
          446,
          "Pataca"
        ],
        [
          "MWK",
          454,
          "Malawi Kwacha"
        ],
        [
          "MYR",
          458,
          "Malaysian Ringgit"
        ],
        [
          "MVR",
          462,
          "Rufiyaa"
        ],
        [
          "MUR",
          480,
          "Mauritius Rupee"
        ],
        [
          "MXN",
          484,
          "Mexican Peso"
        ],
        [
          "MNT",
          496,
          "Tugrik"
        ],
        [
          "MDL",
          498,
          "Moldovan Leu"
        ],
        [
          "MAD",
          504,
          "Moroccan Dirham"
        ],
        [
          "OMR",
          512,
          "Rial Omani"
        ],
        [
          "NAD",
          516,
          "Namibia Dollar"
        ],
        [
          "NPR",
          524,
          "Nepalese Rupee"
        ],
        [
          "ANG",
          532,
          "Netherlands Antillean Guilder"
        ],
        [
          "AWG",
          533,
          "Aruban Florin"
        ],
        [
          "VUV",
          548,
          "Vatu"
        ],
        [
          "NZD",
          554,
          "New Zealand Dollar"
        ],
        [
          "NIO",
          558,
          "Cordoba Oro"
        ],
        [
          "NGN",
          566,
          "Naira"
        ],
        [
          "NOK",
          578,
          "Norwegian Krone"
        ],
        [
          "PKR",
          586,
          "Pakistan Rupee"
        ],
        [
          "PAB",
          590,
          "Balboa"
        ],
        [
          "PGK",
          598,
          "Kina"
        ],
        [
          "PYG",
          600,
          "Guarani"
        ],
        [
          "PEN",
          604,
          "Sol"
        ],
        [
          "PHP",
          608,
          "Philippine Peso"
        ],
        [
          "QAR",
          634,
          "Qatari Rial"
        ],
        [
          "RUB",
          643,
          "Russian Ruble"
        ],
        [
          "RWF",
          646,
          "Rwanda Franc"
        ],
        [
          "SHP",
          654,
          "Saint Helena Pound"
        ],
        [
          "SAR",
          682,
          "Saudi Riyal"
        ],
        [
          "SCR",
          690,
          "Seychelles Rupee"
        ],
        [
          "SGD",
          702,
          "Singapore Dollar"
        ],
        [
          "VND",
          704,
          "Dong"
        ],
        [
          "SOS",
          706,
          "Somali Shilling"
        ],
        [
          "ZAR",
          710,
          "Rand"
        ],
        [
          "SSP",
          728,
          "South Sudanese Pound"
        ],
        [
          "SZL",
          748,
          "Lilangeni"
        ],
        [
          "SEK",
          752,
          "Swedish Krona"
        ],
        [
          "CHF",
          756,
          "Swiss Franc"
        ],
        [
          "SYP",
          760,
          "Syrian Pound"
        ],
        [
          "THB",
          764,
          "Baht"
        ],
        [
          "TOP",
          776,
          "Pa’anga"
        ],
        [
          "TTD",
          780,
          "Trinidad and Tobago Dollar"
        ],
        [
          "AED",
          784,
          "UAE Dirham"
        ],
        [
          "TND",
          788,
          "Tunisian Dinar"
        ],
        [
          "UGX",
          800,
          "Uganda Shilling"
        ],
        [
          "MKD",
          807,
          "Denar"
        ],
        [
          "EGP",
          818,
          "Egyptian Pound"
        ],
        [
          "GBP",
          826,
          "Pound Sterling"
        ],
        [
          "TZS",
          834,
          "Tanzanian Shilling"
        ],
        [
          "USD",
          840,
          "US Dollar"
        ],
        [
          "UYU",
          858,
          "Peso Uruguayo"
        ],
        [
          "UZS",
          860,
          "Uzbekistan Sum"
        ],
        [
          "WST",
          882,
          "Tala"
        ],
        [
          "YER",
          886,
          "Yemeni Rial"
        ],
        [
          "TWD",
          901,
          "New Taiwan Dollar"
        ],
        [
          "SLE",
          925,
          "Leone"
        ],
        [
          "VED",
          926,
          "Bolívar Soberano"
        ],
        [
          "UYW",
          927,
          "Unidad Previsional"
        ],
        [
          "VES",
          928,
          "Bolívar Soberano"
        ],
        [
          "MRU",
          929,
          "Ouguiya"
        ],
        [
          "STN",
          930,
          "Dobra"
        ],
        [
          "CUC",
          931,
          "Peso Convertible"
        ],
        [
          "ZWL",
          932,
          "Zimbabwe Dollar"
        ],
        [
          "BYN",
          933,
          "Belarusian Ruble"
        ],
        [
          "TMT",
          934,
          "Turkmenistan New Manat"
        ],
        [
          "GHS",
          936,
          "Ghana Cedi"
        ],
        [
          "SDG",
          938,
          "Sudanese Pound"
        ],
        [
          "UYI",
          940,
          "Uruguay Peso en Unidades Indexadas (URUIURUI)"
        ],
        [
          "RSD",
          941,
          "Serbian Dinar"
        ],
        [
          "MZN",
          943,
          "Mozambique Metical"
        ],
        [
          "AZN",
          944,
          "Azerbaijan Manat"
        ],
        [
          "RON",
          946,
          "Romanian Leu"
        ],
        [
          "CHE",
          947,
          "WIR Euro"
        ],
        [
          "CHW",
          948,
          "WIR Franc"
        ],
        [
          "TRY",
          949,
          "Turkish Lira"
        ],
        [
          "XAF",
          950,
          "CFA Franc BEAC"
        ],
        [
          "XCD",
          951,
          "East Caribbean Dollar"
        ],
        [
          "XOF",
          952,
          "CFA Franc BCEAO"
        ],
        [
          "XPF",
          953,
          "CFP Franc"
        ],
        [
          "XBA",
          955,
          "Bond Markets Unit European Composite Unit (EURCO)"
        ],
        [
          "XBB",
          956,
          "Bond Markets Unit European Monetary Unit (E.M.U.-6)"
        ],
        [
          "XBC",
          957,
          "Bond Markets Unit European Unit of Account 9 (E.U.A.-9)"
        ],
        [
          "XBD",
          958,
          "Bond Markets Unit European Unit of Account 17 (E.U.A.-17)"
        ],
        [
          "XAU",
          959,
          "Gold"
        ],
        [
          "XDR",
          960,
          "SDR (Special Drawing Right)"
        ],
        [
          "XAG",
          961,
          "Silver"
        ],
        [
          "XPT",
          962,
          "Platinum"
        ],
        [
          "XTS",
          963,
          "Codes specifically reserved for testing purposes"
        ],
        [
          "XPD",
          964,
          "Palladium"
        ],
        [
          "XUA",
          965,
          "ADB Unit of Account"
        ],
        [
          "ZMW",
          967,
          "Zambian Kwacha"
        ],
        [
          "SRD",
          968,
          "Surinam Dollar"
        ],
        [
          "MGA",
          969,
          "Malagasy Ariary"
        ],
        [
          "COU",
          970,
          "Unidad de Valor Real"
        ],
        [
          "AFN",
          971,
          "Afghani"
        ],
        [
          "TJS",
          972,
          "Somoni"
        ],
        [
          "AOA",
          973,
          "Kwanza"
        ],
        [
          "BGN",
          975,
          "Bulgarian Lev"
        ],
        [
          "CDF",
          976,
          "Congolese Franc"
        ],
        [
          "BAM",
          977,
          "Convertible Mark"
        ],
        [
          "EUR",
          978,
          "Euro"
        ],
        [
          "MXV",
          979,
          "Unidad de inversion (UDI)"
        ],
        [
          "UAH",
          980,
          "Hryvnia"
        ],
        [
          "GEL",
          981,
          "Lari"
        ],
        [
          "BOV",
          984,
          "Mvdol"
        ],
        [
          "PLN",
          985,
          "Zloty"
        ],
        [
          "BRL",
          986,
          "Brazilian Real"
        ],
        [
          "CLF",
          990,
          "Unidad de Fomento"
        ],
        [
          "XSU",
          994,
          "Sucre"
        ],
        [
          "USN",
          997,
          "US Dollar (next day)"
        ],
        [
          "XXX",
          999,
          "The codes assigned for transactions where no currency is involved"
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "RejectReason",
      "description": "Code to identify reason for a Reject message.",
      "underlying": "u8",
      "variants": [
        [
          "NA",
          0,
          "Not applicable"
        ],
        [
          "MaxThroughputExceeded",
          1,
          "Max throughput exceeded."
        ],
        [
          "InvalidMsgType",
          2,
          "Invalid message type."
        ],
        [
          "InvalidExpireTimePrecision",
          3,
          "Invalid expire time precision."
        ],
        [
          "InvalidSettlementDate",
          4,
          "Invalid settlement date."
        ],
        [
          "SettlementDateRequired",
          5,
          "Settlement date required."
        ],
        [
          "TradeReportIdRequired",
          6,
          "Trade report ID required."
        ],
        [
          "MissingReportIdSecondaryTradeReportIdOrTradeReportRefId",
          7,
          "Missing report id (SecondaryTradeReportId or TradeReportRefId)."
        ],
        [
          "InvalidTradeId",
          8,
          "Invalid trade ID."
        ],
        [
          "InvalidAlgorithmicTradeIndicator",
          9,
          "Invalid algorithmic trade indicator."
        ],
        [
          "InvalidTradeReportId",
          10,
          "Invalid Trade report ID."
        ],
        [
          "InvalidGapFillSeqNum",
          11,
          "GapFill seqNum should be higher than current seqNum"
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "Header",
      "description": "Header used in trading port messages.",
      "fields": [
        {
          "name": "length",
          "type": "MsgLength",
          "description": "Total length of the message."
        },
        {
          "name": "msgType",
          "type": "MsgType",
          "description": "Type of the message (e.g. Login)."
        },
        {
          "name": "seqNum",
          "type": "SeqNum",
          "description": "Sequence number of the message added by the sender."
        },
        {
          "name": "timestamp",
          "type": "Timestamp",
          "description": "Sending time."
        },
        {
          "name": "sourceTimestamp",
          "type": "Timestamp",
          "description": "Processing time."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "PartyRoleQualifier",
      "description": "Party role qualifier.",
      "underlying": "u8",
      "variants": [
        [
          "NA",
          1
        ],
        [
          "Algorithm",
          2
        ],
        [
          "FirmOrLegalEntity",
          3
        ],
        [
          "NaturalPerson",
          4
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "MifidField",
      "description": "Field related to the MiFID directive.",
      "fields": [
        {
          "name": "shortCode",
          "type": "ShortCode",
          "description": "Short code of MiFID participant."
        },
        {
          "name": "qualifier",
          "type": "PartyRoleQualifier",
          "description": "Qualifier of MiFID participant."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "MifidFields",
      "description": "Fields related to the MiFID directive.",
      "fields": [
        {
          "name": "client",
          "type": "MifidField",
          "description": "MifidField of Client."
        },
        {
          "name": "executingTrader",
          "type": "MifidField",
          "description": "MifidField of Executing Trader."
        },
        {
          "name": "investmentDecisionMaker",
          "type": "MifidField",
          "description": "MifidField of Investment decision maker."
        }
      ]
    },
    {
      "kind": "Array",
      "name": "ClearingCode",
      "type": "AnsiChar",
      "length": 20,
      "description": "Clearing member identifier."
    },
    {
      "kind": "Enum",
      "name": "ClearingIdentifier",
      "description": "Clearing member identifier type.",
      "underlying": "u8",
      "variants": [
        [
          "NotApplicable",
          33,
          "Not Applicable."
        ],
        [
          "Lei",
          78,
          "Legal Entity Identifier."
        ],
        [
          "Custom",
          68,
          "Custom clearing identifier."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "ConnectionClose",
      "description": "The ConnectionClose message confirms the termination of a session through the trading port service.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "reason",
          "type": "ConnectionCloseReason",
          "description": "Connection close reason."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Heartbeat",
      "description": "Heartbeat message",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Login",
      "description": "The login message authenticates a user establishing a connection to the trading port service. The login message must be the first message sent by the client application to request the initiation of a trading port session.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "version",
          "type": "MsgVersion",
          "description": "Indicates the version of the protocol in which the message is defined."
        },
        {
          "name": "token",
          "type": "Token",
          "description": "The security data required for authentication, which is a token received by the exchange member during the registration process."
        },
        {
          "name": "connectionId",
          "type": "ConnectionId",
          "description": "ID of the connection."
        },
        {
          "name": "nextExpectedSeqNum",
          "type": "SeqNum",
          "description": "Next expected message sequence number value to be received."
        },
        {
          "name": "lastSentSeqNum",
          "type": "SeqNum",
          "description": "Last sent sequence number."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "LoginResponse",
      "description": "The login response message. The result field describes the login status, indicating whether the login was successful or not (i.e. successful login).",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "result",
          "type": "LoginResult",
          "description": "Login response status code."
        },
        {
          "name": "nextExpectedSeqNum",
          "type": "SeqNum",
          "description": "Next expected message sequence number value to be received."
        },
        {
          "name": "lastReplaySeqNum",
          "type": "SeqNum",
          "description": "Last replay sequence number."
        },
        {
          "name": "sessionId",
          "type": "SessionId",
          "description": "ID of the session."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Logout",
      "description": "The logout message is sent from the client application to terminate the communication session with the trading port.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "LogoutResponse",
      "description": "The logout response message confirms the client logout message.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "ExecInst",
      "underlying": "u8",
      "description": "Instructions for order handling on exchange trading floor.",
      "bitflags": true,
      "variants": [
        [
          "None",
          "0b00000000"
        ],
        [
          "CancelOnConnectionLoss",
          "0b00000001"
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderAdd",
      "description": "Message used to add new orders to the system.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "stpId",
          "type": "STPId",
          "description": "ID assigned by the client used in the Self Trade Prevention mechanism.",
          "$metadata": {
            "conditionallyRequired": "Never required, can be 0 to disable stp"
          }
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument being traded."
        },
        {
          "name": "orderType",
          "type": "OrderType",
          "description": "Indicates the order type."
        },
        {
          "name": "timeInForce",
          "type": "TimeInForce",
          "description": "Indicates the order's time in force (e.g. GTC)."
        },
        {
          "name": "side",
          "type": "OrderSide",
          "description": "Indicates the order's side (buy or sell)."
        },
        {
          "name": "price",
          "type": "Price",
          "description": "Indicates the price of the order."
        },
        {
          "name": "triggerPrice",
          "type": "Price",
          "description": "Indicates the trigger price (Last Trade Price - LTP) after which the order should be added to the order book.",
          "$metadata": {
            "conditionallyRequired": "Required for OrderType::StopLimit and OrderType::StopLoss, otherwise 0"
          }
        },
        {
          "name": "quantity",
          "type": "Quantity",
          "description": "Indicates the quantity of the instrument included in the order."
        },
        {
          "name": "displayQty",
          "type": "Quantity",
          "description": "Used only for iceberg order. The quantity to be displayed.",
          "$metadata": {
            "conditionallyRequired": "Required for OrderType::Iceberg, otherwise 0"
          }
        },
        {
          "name": "capacity",
          "type": "Capacity",
          "description": "Capacity of the party making the order (either principal or agency)."
        },
        {
          "name": "account",
          "type": "Account",
          "description": "Account number.",
          "$metadata": {
            "conditionallyRequired": "Required for AccountType different than Missing, otherwise filled with 0x0"
          }
        },
        {
          "name": "accountType",
          "type": "AccountType",
          "description": "Type of account associated with the order."
        },
        {
          "name": "flags",
          "type": "OrderFlags",
          "description": "Flags raised on an order."
        },
        {
          "name": "mifidFields",
          "type": "MifidFields",
          "description": "Fields related to the MiFID directive."
        },
        {
          "name": "expire",
          "type": "Timestamp",
          "description": "Expiration time indicating the validity of the order - relevant only when TimeInForce is set to GTD (Good Till Date) or GTT (Good Till Time).",
          "$metadata": {
            "conditionallyRequired": "Required for TimeInForce::GTD or TimeInForce::GTT, otherwise 0"
          }
        },
        {
          "name": "memo",
          "type": "Memo",
          "description": "Free text.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "clearingMemberCode",
          "type": "ClearingCode",
          "description": "Clearing member code.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "clearingMemberClearingIdentifier",
          "type": "ClearingIdentifier",
          "description": "Clearing member's clearing identifier."
        },
        {
          "name": "execInst",
          "type": "ExecInst",
          "description": "Instructions for order handling on exchange trading floor."
        },
        {
          "name": "feeStructureId",
          "type": "u8",
          "description": "Optional identifier of a fee scheme for billing purposes.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused 0"
          }
        },
        {
          "name": "interestedParty",
          "type": "InterestedParty",
          "description": "3rd party interested in this order or trade.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderAddResponse",
      "description": "The message is a response to an OrderAdd message and includes the order execution status.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "publicOrderId",
          "type": "PublicOrderId",
          "description": "Unique for single trading day order identifier assigned by the trading system and shared publicly in market data (public information)."
        },
        {
          "name": "displayQty",
          "type": "Quantity",
          "description": "Used only for iceberg order. The quantity to be displayed."
        },
        {
          "name": "filled",
          "type": "Quantity",
          "description": "Indicates the quantity of the order which has already been filled."
        },
        {
          "name": "status",
          "type": "OrderStatus",
          "description": "Status of the given order."
        },
        {
          "name": "reason",
          "type": "OrderRejectionReason",
          "description": "Reason for rejecting the given order."
        },
        {
          "name": "execTypeReason",
          "type": "ExecTypeReason",
          "description": "Describes why an order was executed and the events related to its lifecycle."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderCancel",
      "description": "Message used to cancel the previously submitted order.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "mifidFields",
          "type": "MifidFields",
          "description": "MifidFields structure."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderCancelResponse",
      "description": "The message is a response to an order cancel request and contains information about its execution, in particular whether the order to cancel was found or not.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "status",
          "type": "OrderStatus",
          "description": "Status of the given order."
        },
        {
          "name": "reason",
          "type": "OrderRejectionReason",
          "description": "Reason for rejecting the given order."
        },
        {
          "name": "execTypeReason",
          "type": "ExecTypeReason",
          "description": "Describes why an order was executed and the events related to its lifecycle."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderModify",
      "description": "Message used to modify the submitted order.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "price",
          "type": "Price",
          "description": "Indicates the price of the given order."
        },
        {
          "name": "triggerPrice",
          "type": "Price",
          "description": "Indicates the trigger price (Last Trade Price - LTP) after which the order should be added to the order book.",
          "$metadata": {
            "conditionallyRequired": "Required for OrderType::StopLimit and OrderType::StopLoss, otherwise 0"
          }
        },
        {
          "name": "quantity",
          "type": "Quantity",
          "description": "Indicates the quantity of the instrument included in the order."
        },
        {
          "name": "displayQty",
          "type": "Quantity",
          "description": "Used only for iceberg order. The quantity to be displayed.",
          "$metadata": {
            "conditionallyRequired": "Required for OrderType::Iceberg, otherwise 0"
          }
        },
        {
          "name": "expire",
          "type": "Timestamp",
          "description": "Expiration time indicating the validity of the order - relevant only when TimeInForce is set to GTD (Good Till Date).",
          "$metadata": {
            "conditionallyRequired": "Required for TimeInForce::GTD, otherwise 0"
          }
        },
        {
          "name": "mifidFields",
          "type": "MifidFields",
          "description": "MifidFields structure."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderModifyResponse",
      "description": "The response message for an OrderModify.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "filled",
          "type": "Quantity",
          "description": "Indicates the quantity of the order which has already been filled."
        },
        {
          "name": "status",
          "type": "OrderStatus",
          "description": "Status of the given order."
        },
        {
          "name": "priorityFlag",
          "type": "PriorityFlag",
          "description": "Indicates whether the priority flag is lost or retained after modification."
        },
        {
          "name": "reason",
          "type": "OrderRejectionReason",
          "description": "Reason for rejecting the given order."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "MassCancelRejectionReason",
      "description": "Indicates a mass cancel rejection reason.",
      "underlying": "u16",
      "variants": [
        [
          "Other",
          99,
          "Other."
        ],
        [
          "NA",
          101,
          "Not applicable."
        ],
        [
          "UnknownInstrument",
          1001,
          "Unknown instrument."
        ],
        [
          "InvalidExecutionTrader",
          1005,
          "Missing Executing Trader repeating group"
        ],
        [
          "UnknownMarketSegmentId",
          1016,
          "Unknown market segment ID."
        ],
        [
          "UnknownConnectionId",
          1017,
          "Unknown connection ID."
        ],
        [
          "InstrumentForbidden",
          1053,
          "Instrument forbidden."
        ],
        [
          "MarketSegmentIdForbidden",
          1054,
          "Market segment ID forbidden."
        ],
        [
          "OperationOnRedistributedInstrumentsForbidden",
          1056,
          "Operation on redistributed instruments forbidden."
        ],
        [
          "RequestNotAllowedOnSponsoredConnection",
          2025,
          "Request not allowed on sponsored connection."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderMassCancel",
      "description": "Message used to cancel multiple existing orders.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "massCancelRequestType",
          "type": "MassCancelRequestType",
          "description": "Mass cancel request type."
        },
        {
          "name": "targetPartyRole",
          "type": "TargetPartyRole",
          "description": "Target party role filter selection field."
        },
        {
          "name": "targetPartyId",
          "type": "u32",
          "description": "Used to identify the party targeted for the action specified in the message.",
          "$metadata": {
            "conditionallyRequired": "Required for TargetPartyRole::SenderLocation/ClientID/ExecutingTrader/InvestmentDecisionMaker, otherwise 0"
          }
        },
        {
          "name": "marketSegmentId",
          "type": "ElementId",
          "description": "Identifies the market segment for request type CancelOrdersForMarketSegment.",
          "$metadata": {
            "conditionallyRequired": "Required for MassCancelRequestType::CancelOrdersForMarketSegment, otherwise 0"
          }
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description:": "ID of the instrument to cancel, valid only for CancelForSecurity.",
          "$metadata": {
            "conditionallyRequired": "Required for MassCancelRequestType::CancelForSecurity, otherwise 0"
          }
        },
        {
          "name": "executingTrader",
          "type": "MifidField",
          "description": "MifidField of Executing Trader."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the mass cancel.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderMassCancelResponse",
      "description": "Response to message used to cancel multiple existing orders.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "totalAffectedOrders",
          "type": "u64",
          "description": "Total number of orders affected by the mass cancel request."
        },
        {
          "name": "massCancelRequestType",
          "type": "MassCancelRequestType",
          "description": "Mass cancel request type."
        },
        {
          "name": "massCancelId",
          "type": "OrderId",
          "description": "Mass cancel request ID."
        },
        {
          "name": "targetPartyRole",
          "type": "TargetPartyRole",
          "description": "Target party role filter selection field."
        },
        {
          "name": "targetPartyId",
          "type": "u32",
          "description": "Used to identify the party targeted for the action specified in the message."
        },
        {
          "name": "marketSegmentId",
          "type": "ElementId",
          "description": "Identifies the market segment for request type CancelOrdersForMarketSegment."
        },
        {
          "name": "reason",
          "type": "MassCancelRejectionReason",
          "description": "Reason for rejecting the given mass order cancel request."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the mass cancel."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Test",
      "description": "The internal message for a test purpose.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "targetTimestamp",
          "type": "Timestamp",
          "description": "Test timestamp (e.g. the send time of a message)."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "OrderExecute",
      "description": "The message used to report trades between counterparties (i.e. generated when two or more orders are matched).",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument being traded."
        },
        {
          "name": "orderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "tradeId",
          "type": "TradeId",
          "description": "ID of the trade."
        },
        {
          "name": "price",
          "type": "Price",
          "description": "Price of the given trade."
        },
        {
          "name": "quantity",
          "type": "Quantity",
          "description": "Quantity of the instrument involved in the given trade."
        },
        {
          "name": "leavesQty",
          "type": "Quantity",
          "description": "How much of the given security is left on the market after the trade is concluded."
        },
        {
          "name": "liquidityIndicator",
          "type": "LiquidityIndicator",
          "description": "Liquidity indicator"
        },
        {
          "name": "currency",
          "type": "Currency",
          "description": "Currency (e.g. USD)."
        },
        {
          "name": "side",
          "type": "OrderSide",
          "description": "Indicates the order's side (buy or sell)."
        },
        {
          "name": "clientOrderId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Reject",
      "description": "The reject message is sent by the trading port service when receiving an erroneous message that cannot be further processed.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "refSeqNum",
          "type": "SeqNum",
          "description": "Sequence number of the rejected message."
        },
        {
          "name": "rejectReason",
          "type": "RejectReason",
          "description": "Reject reason."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "TradeReportType",
      "description": "Type of Trade Report.",
      "underlying": "u8",
      "variants": [
        [
          "Submit",
          1,
          "Submit"
        ],
        [
          "Alleged",
          2,
          "Alleged"
        ],
        [
          "Accept",
          3,
          "Accept"
        ],
        [
          "Decline",
          4,
          "Decline"
        ],
        [
          "TradeReportCancel",
          7,
          "Trade Report Cancel"
        ],
        [
          "TradeBreak",
          8,
          "Trade Break"
        ]
      ]
    },
    {
      "kind": "Alias",
      "name": "Date",
      "alias": "u32",
      "description": "Date (YYYYMMDD) as integer value. In case of undefined date value of '0' (zero) is used."
    },
    {
      "kind": "Enum",
      "name": "TradeReportTransType",
      "description": "Identifies Trade Report message transaction type.",
      "underlying": "u8",
      "variants": [
        [
          "New",
          1,
          "New."
        ],
        [
          "Cancel",
          2,
          "Cancel."
        ],
        [
          "Replace",
          3,
          "Replace."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "TradeType",
      "description": "Type of trade.",
      "underlying": "u8",
      "variants": [
        [
          "PrivatelyNegotiatedTrade",
          22,
          "Privately negotiated trade."
        ],
        [
          "BlockTrade",
          38,
          "Block trade."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "TcrStatus",
      "description": "Trade Report status.",
      "underlying": "u8",
      "variants": [
        [
          "New",
          1,
          "New."
        ],
        [
          "Accepted",
          2,
          "Accepted."
        ],
        [
          "Rejected",
          3,
          "Rejected."
        ],
        [
          "Cancelled",
          4,
          "Cancelled."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "TcrRejectionReason",
      "description": "Code to identify the reason for TCR rejection",
      "underlying": "u16",
      "variants": [
        [
          "NA",
          1,
          "Not applicable."
        ],
        [
          "ExchangeClosed",
          2,
          "Exchange closed."
        ],
        [
          "InvalidPriceIncrement",
          18,
          "Invalid price increment."
        ],
        [
          "Other",
          99,
          "Other."
        ],
        [
          "InstrumentPhaseNoTrading",
          106,
          "Trading is not available for the instrument in its current phase."
        ],
        [
          "UnknownInstrument",
          1001,
          "Unknown instrument."
        ],
        [
          "InvalidExecutionTrader",
          1005,
          "Invalid execution trader."
        ],
        [
          "InvalidDecisionMaker",
          1006,
          "Invalid decision maker."
        ],
        [
          "InvalidClientId",
          1007,
          "Invalid client."
        ],
        [
          "InvalidPartyRoleQualifierForClientId",
          1008,
          "Invalid Party Role Qualifier for Client Id Party group"
        ],
        [
          "InvalidPartyRoleQualifierForExecutingTrader",
          1009,
          "Invalid Party Role Qualifier for Executing Trader Party group"
        ],
        [
          "InvalidPartyRoleQualifierForInvestmentDecisionMaker",
          1010,
          "Invalid Party Role Qualifier for Investment Decision Maker Party group"
        ],
        [
          "OrderQuantityMustBeGreaterThanMinimumQuantity",
          1025,
          "The order quantity must be greater than the minimum quanity."
        ],
        [
          "OrderQuantityMustBeLowerThanMaximumQuantity",
          1026,
          "The order quantity must be lower than the maximum quantity."
        ],
        [
          "OrderPriceMustBeGreaterThanMinimumPrice",
          1027,
          "The order price must be greater than minimum price."
        ],
        [
          "OrderPriceMustBeLowerThanMaximumPrice",
          1028,
          "The order price must be greater than maximum price."
        ],
        [
          "OrderPriceMustBeNonzero",
          1029,
          "The order price must be non-zero."
        ],
        [
          "OrderValueMustBeGreaterThanMinimumValue",
          1030,
          "The order value must be greater than minimum value."
        ],
        [
          "OrderValueMustBeLowerThanMaximumValue",
          1031,
          "The order value must be lower than maximum value."
        ],
        [
          "PriceBelowLowCollar",
          1037,
          "The validation for collars has failed. The price is too low."
        ],
        [
          "PriceAboveHighCollar",
          1038,
          "The validation for collars has failed. The price is too high."
        ],
        [
          "FirmIsNotAMarketMaker",
          1050,
          "Firm is not a Market Maker for this SecurityID (48)"
        ],
        [
          "OperationOnRedistributedInstrumentsForbidden",
          1056,
          "Operation on redistributed instruments forbidden."
        ],
        [
          "FirmNotAuthorizedToBuyAndSellTheInstrument",
          1057,
          "Firm has not been granted permission to buy and sell the selected instrument. Order entry/modification/cancellation is not possible."
        ],
        [
          "FirmNotAuthorizedToBuyTheInstrument",
          1058,
          "Firm has not been granted permission to buy the selected instrument (only selling is allowed). Order entry/modification/cancellation on the buy side is not possible."
        ],
        [
          "FirmNotAuthorizedToSellTheInstrument",
          1059,
          "Firm has not been granted permission to sell the selected instrument (only buying is allowed). Order entry/modification/cancellation on the sell side is not possible."
        ],
        [
          "OperationsOnOrdersAndQuotesForbiddenDuringInstrumentSuspension",
          1061,
          "Entry/modification/cancellation of orders and quotes is not possible when an instrument is suspended."
        ],
        [
          "InvalidPartyIdForClientId",
          1070,
          "Invalid PartyID (448) for Client ID"
        ],
        [
          "InvalidPartyIdForExecutingTrader",
          1071,
          "Invalid PartyID (448) for Executing Trader"
        ],
        [
          "InvalidPartyIdForInvestmentDecisionMaker",
          1072,
          "Invalid PartyID (448) for Investment Decision Maker"
        ],
        [
          "InvalidPartyRoleQualifierForPartyId",
          1075,
          "Invalid PartyRoleQualifier (2376) for PartyID (448)"
        ],
        [
          "MissingClearingMemberCode",
          1076,
          "Missing ClearingMemberCode"
        ],
        [
          "ForbiddenClearingMemberCode",
          1077,
          "Forbidden ClearingMemberCode"
        ],
        [
          "MarketModelNotSupportedOnSponsoredConnection",
          1081,
          "Market Model not supported sponsored connection"
        ],
        [
          "OperationForbiddenDuringEarlyLateMonitoring",
          1084,
          "Entry/modification/cancellation of orders and quotes by members, as well as block and cross trades submission is not allowed when an instrument remains in Early / Late Monitoring market phases."
        ],
        [
          "InvalidClearingMemberCodeLength",
          1085,
          "Clearing Member code must be 4-digit number in case of custom codes and 20-char string in case of LEI."
        ],
        [
          "NotAuthorizedToQuoteInstrument",
          1209,
          "Firm is not a Market Maker for this SecurityID (48)."
        ],
        [
          "UnknownTradeReport",
          2001,
          "Unknown trade report"
        ],
        [
          "DuplicateTradeReportId",
          2002,
          "Duplicate TradeReportId"
        ],
        [
          "TradeReportTypeNotCompatibleWithTradeReportTransType",
          2005,
          "TradeReportType not compatible with TradeReportTransType"
        ],
        [
          "InvalidExecType",
          2008,
          "Invalid ExecType"
        ],
        [
          "TradeReportRefIdNotAllowed",
          2009,
          "TradeReportRefId not allowed"
        ],
        [
          "SettlementDateCannotBeEarlierThanMinimumSettlementDate",
          2015,
          "Settlement date cannot be earlier than minimum settlement date"
        ],
        [
          "SettlementDateCannotBeLaterThanMaximumSettlementDate",
          2016,
          "Settlement date cannot be later than maximum settlement date"
        ],
        [
          "SettlementDateMustBeASettlementDay",
          2017,
          "In case settlement date provided does not follow settlement calendar"
        ],
        [
          "UnknownContraFirm",
          2022,
          "Unknown contra firm."
        ],
        [
          "SentAttributeDoesNotMatchOriginalValue",
          2024,
          "Sent attribute does not match original value"
        ],
        [
          "RequestNotAllowedForBlockInstrument",
          2026,
          "Request not allowed for BLOCK instrument"
        ],
        [
          "RequestNotAllowedForClobInstrument",
          2027,
          "Request not allowed for CLOB instrument"
        ],
        [
          "RequestNotAllowedForCrossInstrument",
          2028,
          "Request not allowed for CROSS instrument"
        ],
        [
          "CrossNotAllowedOutsideOfClobInstrumentSpread",
          2030,
          "Cross not allowed outside of CLOB instrument spread"
        ],
        [
          "CrossPriceNotEqualToTheReferencePrice",
          2031,
          "Cross price not equal to the reference price"
        ],
        [
          "CrossNotAllowedDuringClobInstrumentAuctionOrSuspension",
          2032,
          "Cross not allowed during CLOB instrument Auction or Suspension"
        ],
        [
          "ForbiddenSecondaryTradereportId",
          2033,
          "Forbidden SecondaryTradeReportID"
        ],
        [
          "UnknownSecondaryTradereportId",
          2034,
          "Unknown SecondaryTradeReportID"
        ],
        [
          "NoTradeForClobReferenceInstrument",
          2035,
          "Trading on BLOCK and CROSS instruments is not alllowed, because linked CLOB instrument has not been traded yet."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "TcrParty",
      "description": "Information about Trade Capture Report party.",
      "fields": [
        {
          "name": "flags",
          "type": "OrderFlags",
          "description": "Flags raised on an order."
        },
        {
          "name": "mifidFields",
          "type": "MifidFields",
          "description": "Fields related to the MiFID directive."
        },
        {
          "name": "clearingMemberCode",
          "type": "ClearingCode",
          "description": "Clearing member code."
        },
        {
          "name": "clearingMemberClearingIdentifier",
          "type": "ClearingIdentifier",
          "description": "Clearing member's clearing identifier."
        },
        {
          "name": "account",
          "type": "Account",
          "description": "Account number."
        },
        {
          "name": "accountType",
          "type": "AccountType",
          "description": "Type of account associated with the order."
        },
        {
          "name": "orderCapacity",
          "type": "Capacity",
          "description": "Designates the capacity of the firm placing the order."
        },
        {
          "name": "feeStructureId",
          "type": "u8",
          "description": "Optional identifier of a fee scheme for billing purposes."
        },
        {
          "name": "interestedParty",
          "type": "InterestedParty",
          "description": "3rd party interested in this order or trade."
        },
        {
          "name": "memo",
          "type": "Memo",
          "description": "Free text."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "AlgorithmicTradeIndicator",
      "description": "Indicates algorithmic trade.",
      "underlying": "u8",
      "variants": [
        [
          "NA",
          1,
          "Not applicable."
        ],
        [
          "NonAlgorithmicTrade",
          2,
          "Non-algorithmic trade."
        ],
        [
          "AlgorithmicTrade",
          3,
          "Algorithmic trade."
        ]
      ]
    },
    {
      "kind": "Array",
      "name": "TradeReportId",
      "type": "AnsiChar",
      "length": 21,
      "description": "Unique identifier of trade capture report. 21st character is reserved for exchange-assigned identifiers."
    },
    {
      "kind": "Array",
      "name": "TradeReportRefID",
      "type": "AnsiChar",
      "length": 21,
      "description": "Reference identifier used with Cancel and Replace transaction types. The TradeReportID that is being referenced for trade correction or cancelation."
    },
    {
      "kind": "Enum",
      "name": "ExecType",
      "description": "Type of execution being reported. Uses subset of ExecType for trade capture reports.",
      "underlying": "u8",
      "variants": [
        [
          "NA",
          1,
          "Not applicable"
        ],
        [
          "Rejected",
          8,
          "Rejected."
        ],
        [
          "Expired",
          12,
          "Expired"
        ],
        [
          "Trade",
          15,
          "Trade."
        ],
        [
          "TradeCorrect",
          16,
          "Trade Correct."
        ],
        [
          "TradeCancel",
          17,
          "Trade Cancel."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "TradeBust",
      "description": "Message used to inform about cancellation of previously accepted Trade.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "tradeId",
          "type": "TradeId",
          "description": "The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "TradeCaptureReportSingle",
      "description": "Trade Capture Report - single side.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument included in the order."
        },
        {
          "name": "tradeReportId",
          "type": "TradeReportId",
          "description": "Unique identifier of the trade capture report."
        },
        {
          "name": "secondaryTradeReportId",
          "type": "OrderId",
          "description": "ID of the trade capture report."
        },
        {
          "name": "tradeId",
          "type": "TradeId",
          "description": "The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty."
        },
        {
          "name": "tradeReportTransType",
          "type": "TradeReportTransType",
          "description": "Identifies Trade Report message transaction type."
        },
        {
          "name": "tradeReportType",
          "type": "TradeReportType",
          "description": "Type of Trade Report."
        },
        {
          "name": "tradeType",
          "type": "TradeType",
          "description": "Type of trade."
        },
        {
          "name": "algorithmicTradeIndicator",
          "type": "AlgorithmicTradeIndicator",
          "description": "Indicates algorithmic trader."
        },
        {
          "name": "execType",
          "type": "ExecType",
          "description": "Type of execution being reported. Uses subset of ExecType for trade capture reports."
        },
        {
          "name": "tradeReportRefId",
          "type": "TradeReportRefID",
          "description": "Reference identifier used with Cancel and Replace transaction types. The TradeReportID that is being referenced for trade correction or cancelation."
        },
        {
          "name": "lastQty",
          "type": "Quantity",
          "description": "Quantity (e.g. shares) bought/sold on this (last) fill."
        },
        {
          "name": "lastPx",
          "type": "Price",
          "description": "Price of this (last) fill."
        },
        {
          "name": "settlementDate",
          "type": "Date",
          "description": "Settlement date of the trade is equal to current date plus actual settlement offset calendar days."
        },
        {
          "name": "side",
          "type": "OrderSide",
          "description": "Side of order."
        },
        {
          "name": "counterpartyCode",
          "type": "ParticipantCode",
          "description": "Participant code of the counterparty."
        },
        {
          "name": "tcrParty",
          "type": "TcrParty",
          "description": "TCR party."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "TradeCaptureReportDual",
      "description": "Trade Capture Report - dual sided.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument included in the order."
        },
        {
          "name": "tradeReportId",
          "type": "TradeReportId",
          "description": "Unique identifier of trade capture report."
        },
        {
          "name": "secondaryTradeReportId",
          "type": "OrderId",
          "description": "ID of the trade capture report."
        },
        {
          "name": "tradeId",
          "type": "TradeId",
          "description": "The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty."
        },
        {
          "name": "tradeReportTransType",
          "type": "TradeReportTransType",
          "description": "Identifies Trade Report message transaction type."
        },
        {
          "name": "tradeReportType",
          "type": "TradeReportType",
          "description": "Type of Trade Report."
        },
        {
          "name": "tradeType",
          "type": "TradeType",
          "description": "Type of trade."
        },
        {
          "name": "algorithmicTradeIndicator",
          "type": "AlgorithmicTradeIndicator",
          "description": "Indicates algorithmic trade."
        },
        {
          "name": "execType",
          "type": "ExecType",
          "description": "Type of execution being reported. Uses subset of ExecType for trade capture reports."
        },
        {
          "name": "tradeReportRefId",
          "type": "TradeReportRefID",
          "description": "Reference identifier used with Cancel and Replace transaction types. The TradeReportID that is being referenced for trade correction or cancelation."
        },
        {
          "name": "lastQty",
          "type": "Quantity",
          "description": "Quantity (e.g. shares) bought/sold on this (last) fill."
        },
        {
          "name": "lastPx",
          "type": "Price",
          "description": "Price of this (last) fill."
        },
        {
          "name": "settlementDate",
          "type": "Date",
          "description": "Settlement date of the trade is equal to current date plus actual settlement offset calendar days."
        },
        {
          "name": "tcrPartyBuy",
          "type": "TcrParty",
          "description": "TCR party - buy side."
        },
        {
          "name": "tcrPartySell",
          "type": "TcrParty",
          "description": "TCR party - sell side."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "TradeCaptureReportResponse",
      "description": "The message is a response to an Trade Capture Report message, containing the state of TCR execution.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument included in the order."
        },
        {
          "name": "tradeId",
          "type": "TradeId",
          "description": "The unique ID assigned to the trade entity once it is received or matched by the exchange or central counterparty."
        },
        {
          "name": "tradeReportId",
          "type": "TradeReportId",
          "description": "Unique identifier of trade capture report."
        },
        {
          "name": "secondaryTradeReportId",
          "type": "OrderId",
          "description": "ID of the trade capture report."
        },
        {
          "name": "status",
          "type": "TcrStatus",
          "description": "Status of the given order."
        },
        {
          "name": "reason",
          "type": "TcrRejectionReason",
          "description": "Reason for rejecting the given TCR."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "MassCancelRequestType",
      "underlying": "u8",
      "description": "Mass cancel request type.",
      "variants": [
        [
          "CancelForSecurity",
          1,
          "Cancel orders for a security."
        ],
        [
          "CancelAllOrders",
          7,
          "Cancel all orders."
        ],
        [
          "CancelOrdersForMarketSegment",
          9,
          "Cancel orders for a market segment."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "TargetPartyRole",
      "underlying": "u8",
      "description": "Target party role filter selection field.",
      "variants": [
        [
          "None",
          0,
          "No filtering."
        ],
        [
          "LiquidityProvider",
          35,
          "Liquidity provider."
        ],
        [
          "SenderLocation",
          54,
          "Sender location."
        ],
        [
          "MarketMaker",
          66,
          "Market maker."
        ],
        [
          "ClientID",
          3,
          "Client ID."
        ],
        [
          "ExecutingTrader",
          12,
          "Executing trader."
        ],
        [
          "InvestmentDecisionMaker",
          122,
          "Investment decision maker."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "MsgType",
      "underlying": "u16",
      "variants": [
        [
          "Test",
          1,
          "The internal message for a test purpose."
        ],
        [
          "Login",
          2,
          "The login message authenticates a user establishing a connection to the trading port service. The login message must be the first message sent by the client application to request the initiation of a trading port session."
        ],
        [
          "LoginResponse",
          3,
          "The login response message. The result field describes the login status, indicating whether the login was successful or not (i.e. successful login)."
        ],
        [
          "OrderAdd",
          4,
          "Message used to add new orders to the system."
        ],
        [
          "OrderAddResponse",
          5,
          "The message is a response to an OrderAdd message and includes the order execution status."
        ],
        [
          "OrderCancel",
          6,
          "Message used to cancel the previously submitted orders."
        ],
        [
          "OrderCancelResponse",
          7,
          "The message is a response to an order cancel request and contains information about its execution, in particular whether the order to cancel was found or not."
        ],
        [
          "OrderModify",
          8,
          "Message used to modify the submitted order."
        ],
        [
          "OrderModifyResponse",
          9,
          "The response message for an OrderModify."
        ],
        [
          "OrderExecute",
          10,
          "The message used to report trades between counterparties (i.e. generated when two or more orders are matched)."
        ],
        [
          "Logout",
          11,
          "The logout message is sent from the client application to terminate the communication session with the trading port."
        ],
        [
          "ConnectionClose",
          12,
          "The ConnectionClose message confirms the termination of a session through the trading port service."
        ],
        [
          "Heartbeat",
          13,
          "Heartbeat message."
        ],
        [
          "LogoutResponse",
          14,
          "The logout response message confirms the client logout message."
        ],
        [
          "Reject",
          15,
          "The reject message is sent by the trading port service when receiving an erroneous message that cannot be further processed."
        ],
        [
          "TradeCaptureReportSingle",
          18,
          "Trade Capture Report - single side."
        ],
        [
          "TradeCaptureReportDual",
          19,
          "Trade Capture Report - dual sided."
        ],
        [
          "TradeCaptureReportResponse",
          20,
          "The message is a response to an Trade Capture Report message, containing the state of TCR execution."
        ],
        [
          "TradeBust",
          23,
          "TradeBust."
        ],
        [
          "MassQuote",
          24,
          "MassQuote."
        ],
        [
          "MassQuoteResponse",
          25,
          "MassQuoteResponse."
        ],
        [
          "RequestForExecution",
          28,
          "Informs MM that execution has been requested."
        ],
        [
          "OrderMassCancel",
          29,
          "Message used to cancel multiple existing orders."
        ],
        [
          "OrderMassCancelResponse",
          30,
          "Response to message used to cancel multiple existing orders."
        ],
        [
          "BidOfferUpdate",
          31,
          "Message send during the IPO to the sell side or during the Tender Offer to the buy side."
        ],
        [
          "MarketMakerCommand",
          32,
          "Market Maker command request."
        ],
        [
          "MarketMakerCommandResponse",
          33,
          "The response to the Market Maker command."
        ],
        [
          "GapFill",
          34,
          "Create a SeqNum gap bettwen current SeqNum and header::seqNum"
        ],
        [
          "TradingSessionStatus",
          35,
          "The Trading Session Status provides information on the status of a trading session."
        ],
        [
          "TestEvent",
          255,
          "A message to relay test scenario information"
        ]
      ]
    },
    {
      "kind": "Array",
      "name": "ScenarioName",
      "type": "AnsiChar",
      "length": 200,
      "description": "Test scenario name"
    },
    {
      "kind": "Enum",
      "name": "EventType",
      "description": "Test event type",
      "underlying": "u8",
      "variants": [
        [
          "Flush",
          1,
          "Flush the Test scenario"
        ],
        [
          "ScenarioStart",
          2,
          "Start of test scenario"
        ],
        [
          "ScenarioEnd",
          3,
          "End of test scenario"
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "GapFill",
      "description": "Create a SeqNum gap bettwen current SeqNum and header::seqNum",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "TestEvent",
      "description": "Test event",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "scenarioName",
          "type": "ScenarioName",
          "description": "Test scenario name"
        },
        {
          "name": "eventType",
          "type": "EventType",
          "description": "Test event type"
        }
      ]
    },
    {
      "kind": "Union",
      "name": "Message",
      "members": [
        "Test",
        "Login",
        "LoginResponse",
        "OrderAdd",
        "OrderAddResponse",
        "OrderCancel",
        "OrderCancelResponse",
        "OrderModify",
        "OrderModifyResponse",
        "OrderExecute",
        "Logout",
        "ConnectionClose",
        "Heartbeat",
        "LogoutResponse",
        "Reject",
        "TradeCaptureReportSingle",
        "TradeCaptureReportDual",
        "TradeBust",
        "TradeCaptureReportResponse",
        "MassQuote",
        "MassQuoteResponse",
        "MarketMakerCommand",
        "MarketMakerCommandResponse",
        "RequestForExecution",
        "OrderMassCancel",
        "OrderMassCancelResponse",
        "BidOfferUpdate",
        "GapFill",
        "TradingSessionStatus",
        "TestEvent"
      ],
      "discriminator": [
        "header",
        "msgType"
      ]
    },
    {
      "kind": "Enum",
      "name": "ExecTypeReason",
      "underlying": "u8",
      "description": "Describes why an order was executed and the events related to its lifecycle.",
      "variants": [
        [
          "NA",
          1,
          "Not applicable."
        ],
        [
          "CancelOnDisconnect",
          2,
          "Order cancelled by the canceller on client disconnect."
        ],
        [
          "Expired",
          3,
          "Order cancelled by the canceller due to expiration."
        ],
        [
          "Triggered",
          4,
          "Notification of Stop order activation."
        ],
        [
          "CancelOnSuspension",
          5,
          "Order cancelled by canceller due to instrument suspension."
        ],
        [
          "OrderRestatement",
          6,
          "Order reinstated."
        ],
        [
          "IcebergOrderRefill",
          7,
          "Iceberg order refill."
        ],
        [
          "CancelByStp",
          8,
          "Order cancelled due to self-trade prevention."
        ],
        [
          "CancelByCorporateAction",
          9,
          "Order cancelled due to submitted Corporate Action."
        ],
        [
          "CancelByMassCancel",
          10,
          "Order cancelled due to mass cancel"
        ],
        [
          "CancelIocFokOrder",
          11,
          "Order cancelled due to IOC/FOK."
        ],
        [
          "CancelByMarketOperations",
          12,
          "Order cancelled due to market operations."
        ],
        [
          "Replaced",
          13,
          "Order replaced."
        ],
        [
          "FirstTradeOnAggressiveOrder",
          14,
          "First trade on aggressive order."
        ],
        [
          "Rejected",
          15,
          "Order rejected."
        ],
        [
          "CancelonBuyOnlyStateEntry",
          16,
          "Cancel on BuyOnly state entry"
        ],
        [
          "CancelonKnockedOutStateEntry",
          17,
          "Cancel on KnockedOut state entry"
        ],
        [
          "CancelByRiskManagement",
          18,
          "Order cancelled due to exceeding RMA post trade limit"
        ],
        [
          "CancelOnDcDisconnect",
          19,
          "Order cancelled due to drop copy disconnect"
        ],
        [
          "VfaActivated",
          20,
          "Notification of VFA/VFC order activation."
        ],
        [
          "HybridActivated",
          21,
          "Notification of Hybrid order activation."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "QuoteOrder",
      "description": "Quote order with price and quantity.",
      "fields": [
        {
          "name": "price",
          "type": "Price",
          "description": "Indicates the price of the given order."
        },
        {
          "name": "quantity",
          "type": "Quantity",
          "description": "Indicates the quantity of the instrument included in the order."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "Quote",
      "description": "Quote with bid / ask",
      "fields": [
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument being traded."
        },
        {
          "name": "bid",
          "type": "QuoteOrder",
          "description": "Bid side of the quote"
        },
        {
          "name": "ask",
          "type": "QuoteOrder",
          "description": "Ask side of the quote"
        }
      ]
    },
    {
      "kind": "Array",
      "name": "QuotesArray",
      "type": "Quote",
      "description": "The Array of quotes.",
      "length": 30
    },
    {
      "kind": "Struct",
      "name": "Quotes",
      "description": "Array of quotes grouped with their amount.",
      "fields": [
        {
          "name": "count",
          "type": "u8",
          "description": "How many quotes this message contains."
        },
        {
          "name": "items",
          "type": "QuotesArray",
          "description": "The array of quotes."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "MassQuote",
      "description": "Mass Quote",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "stpId",
          "type": "STPId",
          "description": "An ID assigned by the client used in Self Match Prevention mechanism.",
          "$metadata": {
            "conditionallyRequired": "Never required, can be 0 to disable stp"
          }
        },
        {
          "name": "capacity",
          "type": "Capacity",
          "description": "Capacity of the party making the order (either principal or agency)."
        },
        {
          "name": "account",
          "type": "Account",
          "description": "Account mnemonic as agreed between buy and sell sides.",
          "$metadata": {
            "conditionallyRequired": "Required for AccountType different than Missing, otherwise filled with 0x0"
          }
        },
        {
          "name": "accountType",
          "type": "AccountType",
          "description": "Type of account associated with the order."
        },
        {
          "name": "flags",
          "type": "OrderFlags",
          "description": "Flags raised on an order."
        },
        {
          "name": "mifidFields",
          "type": "MifidFields"
        },
        {
          "name": "memo",
          "type": "Memo",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "clearingMemberCode",
          "type": "ClearingCode",
          "description": "Clearing member code.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "clearingMemberClearingIdentifier",
          "type": "ClearingIdentifier",
          "description": "Clearing member's clearing identifier."
        },
        {
          "name": "quotes",
          "type": "Quotes",
          "description": "The array of quotes."
        },
        {
          "name": "feeStructureId",
          "type": "u8",
          "description": "Optional identifier of a fee scheme for billing purposes.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused 0"
          }
        },
        {
          "name": "interestedParty",
          "type": "InterestedParty",
          "description": "3rd party interested in this order or trade.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        },
        {
          "name": "quoteId",
          "type": "ClientOrderId",
          "description": "Arbitrary user provided value associated with the mass quote.",
          "$metadata": {
            "conditionallyRequired": "Never required, if unused filled with 0x0"
          }
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "QuoteOrderResponse",
      "description": "The message is a response to a single Quote and includes the order execution status.",
      "fields": [
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "ID of the instrument being traded."
        },
        {
          "name": "bidOrderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "askOrderId",
          "type": "OrderId",
          "description": "Unique for each trading day order identifier based on the sequence number of order message, bulk sequence number, session ID and connection ID."
        },
        {
          "name": "status",
          "type": "OrderStatus",
          "description": "Status of the given order."
        },
        {
          "name": "reason",
          "type": "OrderRejectionReason",
          "description": "Reason for rejecting the given order."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "MassQuoteStatus",
      "description": "Indicates the status of the mass quote.",
      "underlying": "u8",
      "variants": [
        [
          "Accepted",
          1,
          "Mass quote acknowledged by system."
        ],
        [
          "Rejected",
          2,
          "Mass quote rejected."
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "MassQuoteRejectionReason",
      "description": "Indicates the status of the mass quote.",
      "underlying": "u16",
      "variants": [
        [
          "NA",
          1,
          "Not applicable."
        ],
        [
          "ExchangeClosed",
          2,
          "Exchange closed."
        ],
        [
          "Other",
          99,
          "Other."
        ],
        [
          "InvalidExecutionTrader",
          1005,
          "Invalid execution trader."
        ],
        [
          "InvalidDecisionMaker",
          1006,
          "Invalid decision maker."
        ],
        [
          "InvalidClientId",
          1007,
          "Invalid client."
        ],
        [
          "InvalidPartyRoleQualifierForClientId",
          1008,
          "Invalid Party Role Qualifier for Client Id Party group"
        ],
        [
          "InvalidPartyRoleQualifierForExecutingTrader",
          1009,
          "Invalid Party Role Qualifier for Executing Trader Party group"
        ],
        [
          "InvalidPartyRoleQualifierForInvestmentDecisionMaker",
          1010,
          "Invalid Party Role Qualifier for Investment Decision Maker Party group"
        ],
        [
          "MissingOrderOriginationForSponsoredAccessConnection",
          1055,
          "Missing OrderOrigination for sponsored access connection."
        ],
        [
          "OperationsOnOrdersAndQuotesForbiddenDuringInstrumentSuspension",
          1061,
          "Entry/modification/cancellation of orders and quotes is not possible when an instrument is suspended."
        ],
        [
          "InvalidPartyIdForClientId",
          1070,
          "Invalid PartyID (448) for Client ID"
        ],
        [
          "InvalidPartyIdForExecutingTrader",
          1071,
          "Invalid PartyID (448) for Executing Trader"
        ],
        [
          "InvalidPartyIdForInvestmentDecisionMaker",
          1072,
          "Invalid PartyID (448) for Investment Decision Maker"
        ],
        [
          "InvalidPartyRoleQualifierForPartyId",
          1075,
          "Invalid PartyRoleQualifier (2376) for PartyID (448)"
        ],
        [
          "MissingClearingMemberCode",
          1076,
          "Missing ClearingMemberCode"
        ],
        [
          "ForbiddenClearingMemberCode",
          1077,
          "Forbidden ClearingMemberCode"
        ],
        [
          "InvalidClientIdForSponsoredConnection",
          1078,
          "Invalid Client ID for sponsored connection"
        ],
        [
          "ForbiddenOrderCapacityValueForSponsoredConnection",
          1080,
          "Forbidden OrderCapacity value for sponsored connection"
        ],
        [
          "MarketModelNotSupportedOnSponsoredConnection",
          1081,
          "Market Model not supported sponsored connection"
        ],
        [
          "InvalidClearingMemberCodeLength",
          1085,
          "Clearing Member code must be 4-digit number in case of custom codes and 20-char string in case of LEI."
        ],
        [
          "DuplicateInstrument",
          1202,
          "Multiple quotes for the same instrument within Mass Quote message."
        ],
        [
          "InvalidQuotesCount",
          1204,
          "Invalid quotes count value."
        ],
        [
          "ForbiddenOrderCapacityValue",
          1210,
          "Forbidden OrderCapacity (528) value for Mass Quote."
        ],
        [
          "LiquidityProvisionActivityFlagNotSetForMassQuote",
          1212,
          "LiquidityProvisionActivity flag (within mifidFields.flags) in binary Mass Quote meesage must be always set to 1."
        ]
      ]
    },
    {
      "kind": "Array",
      "name": "QuoteOrderResponseArray",
      "type": "QuoteOrderResponse",
      "length": 30,
      "description": "An array of QuoteOrderResponse."
    },
    {
      "kind": "Struct",
      "name": "QuoteOrderResponses",
      "description": "Array of quote order responses grouped with their amount.",
      "fields": [
        {
          "name": "count",
          "type": "u8",
          "description": "How many quote order responses this message contains."
        },
        {
          "name": "items",
          "type": "QuoteOrderResponseArray",
          "description": "The array of quote order responses."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "MassQuoteResponse",
      "description": "The response to a MassQuote message.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "massQuoteId",
          "type": "OrderId",
          "description": "Quote id"
        },
        {
          "name": "responses",
          "type": "QuoteOrderResponses",
          "description": "The slice of responses."
        },
        {
          "name": "status",
          "type": "MassQuoteStatus",
          "description": "Status of the given mass quote order."
        },
        {
          "name": "reason",
          "type": "MassQuoteRejectionReason",
          "description": "Reason for rejecting the given mass quote order."
        },
        {
          "name": "feeStructureId",
          "type": "u8",
          "description": "Optional identifier of a fee scheme for billing purposes."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "CommandRejectionCode",
      "description": "Reason for rejecting the Market Maker command.",
      "underlying": "u16",
      "variants": [
        [
          "Other",
          99
        ],
        [
          "UnknownInstrument",
          1001
        ],
        [
          "FirmNotAuthorizedForMmCommand",
          1304,
          "Market Maker Command may be submitted only by firm that is a Market Maker for the instrument."
        ],
        [
          "InstrumentAlreadyKnockedOut",
          1313,
          "Attempt to knock-out an instrument that is already in knocked-out state."
        ],
        [
          "MmCannotRevokeMarketOperationKnockOut",
          1314,
          "Market Maker's attempt to revoke Market Operation's knock-out on an instrument."
        ],
        [
          "ExchangeClosed",
          3002
        ],
        [
          "FirmNotAuthorizedToQuoteInstrument",
          3009
        ],
        [
          "CommandNotAllowedInCurrentState",
          3020
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "MarketMakerCommand",
      "description": "Market Maker command request.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "Instrument ID."
        },
        {
          "name": "action",
          "type": "CommandAction",
          "description": "The action for the Market Maker command request."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "CommandAction",
      "description": "The action for the Market Maker command request.",
      "underlying": "u8",
      "variants": [
        [
          "ChangeToHybridBuyOnly",
          1
        ],
        [
          "ChangeToKnockOut",
          2
        ],
        [
          "RevokeKnockOut",
          3
        ]
      ]
    },
    {
      "kind": "Enum",
      "name": "CommandResult",
      "description": "Confirmation of achieving the intended action. If the action (e.g., Buy Only state) has already been achieved before the command, the result will be positive.",
      "underlying": "u8",
      "variants": [
        [
          "Success",
          1
        ],
        [
          "Failure",
          2
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "MarketMakerCommandResponse",
      "description": "The response to the Market Maker command.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "refId",
          "type": "u32",
          "description": "A reference id to the Market Maker command request message."
        },
        {
          "name": "result",
          "type": "CommandResult",
          "description": "Confirmation of achieving the intended action. If the action (e.g., Buy Only state) has already been achieved before the command, the result will be positive."
        },
        {
          "name": "rejectionCode",
          "type": "CommandRejectionCode",
          "description": "Reason for rejecting the Market Maker command."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "RequestForExecutionReason",
      "description": "The reason for this RFE.",
      "underlying": "u8",
      "variants": [
        [
          "PassiveQuote",
          1
        ],
        [
          "AggressiveQuote",
          2
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "RequestForExecution",
      "description": "The information for the MM that one of the quotes has been crossed.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "Instrument ID"
        },
        {
          "name": "reason",
          "type": "RequestForExecutionReason",
          "description": "The reason for this RFE."
        }
      ]
    },
    {
      "kind": "Struct",
      "name": "BidOfferUpdate",
      "description": "Message send during the IPO to the sell side or during the Tender Offer to the buy side.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "instrumentId",
          "type": "ElementId",
          "description": "Instrument ID."
        },
        {
          "name": "updateType",
          "type": "BidOfferUpdateType",
          "description": "Indicates a type of the BidOfferUpdate message."
        },
        {
          "name": "totalBidSize",
          "type": "Quantity",
          "description": "Specifies the total bid size."
        },
        {
          "name": "totalOfferSize",
          "type": "Quantity",
          "description": "Specifies the total offer size."
        },
        {
          "name": "bidOrders",
          "type": "u32",
          "description": "Number of bid orders."
        },
        {
          "name": "offerOrders",
          "type": "u32",
          "description": "Number of offer orders."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "BidOfferUpdateType",
      "description": "Indicates a type of the BidOfferUpdate message.",
      "underlying": "u8",
      "variants": [
        [
          "Ipo",
          1,
          "Ipo."
        ],
        [
          "TenderOffer",
          2,
          "Tender Offer."
        ]
      ]
    },
    {
      "kind": "Struct",
      "name": "TradingSessionStatus",
      "description": "The Trading Session Status provides information on the status of a trading session.",
      "fields": [
        {
          "name": "header",
          "type": "Header",
          "description": "Message header."
        },
        {
          "name": "marketId",
          "type": "MicCode",
          "description": "Market structure's Market Identifier Code (MIC) as specified in ISO 10383."
        },
        {
          "name": "date",
          "type": "Date",
          "description": "Date of the business session when provided and 0 for StartOfTechnicalSession and EndOfTechnicalSession events."
        },
        {
          "name": "tradingSessionEvent",
          "type": "TradingSessionEvent",
          "description": "Identifies an event related to the trading status of a trading session."
        }
      ]
    },
    {
      "kind": "Enum",
      "name": "TradingSessionEvent",
      "description": "Identifies an event related to the status of a trading session.",
      "underlying": "u8",
      "variants": [
        [
          "PreviousDayRestateStart",
          1,
          "Previous day restate start."
        ],
        [
          "PreviousDayRestateEnd",
          2,
          "Previous day restate end."
        ],
        [
          "StartOfTradingSessionMIC",
          3,
          "Start of trading session MIC."
        ],
        [
          "EndOfTradingSessionMIC",
          4,
          "End of trading session MIC."
        ]
      ]
    }
  ]
}
